#ifndef COMB_COMB_TYPES_HPP__
#define COMB_COMB_TYPES_HPP__

#include <map>
#include <string>
#include <vector>
#include <valarray>

#include "boost/multi_array.hpp"

// forward decleration of data structures.
class SnpRecord;
class SeqSnpCall;
class ColorSnpCall;

// The call rates matrix will be large arrays of 5 and 4 dimensions for color and sequence space respectively.
typedef boost::multi_array<double, 5> array_type5;
typedef boost::multi_array<double, 4> array_type4;

typedef unsigned int mapping_type;

#define SEQUENCE  0x0001
#define COLOR     0x0002

#define PERM_FILE 0x0010
#define SAM_FILE  0x0020
#define BAM_FILE  0x0040
#define BED_FILE  0x0080

// A map from sequence name to an array of which snp candidates are at each genomic position, or 0 if no SNP is at that location.
typedef std::map<std::string, std::valarray<unsigned int> > cand_blocks_t;

// A list of all snp candidate blocks.  
typedef std::vector<SnpRecord>      cand_vector_t;

// Color and Sequence vectors of SNPs with probabilities of each sequence.
typedef std::vector<ColorSnpCall>   color_call_vector_t;
typedef std::vector<SeqSnpCall>     seq_call_vector_t;

// Shorthand for mapping of sequence names to arrays of counts for positions.
typedef std::map<std::string, std::valarray<float> > map_str_vafl_t;

// Shorthand for mapping of sequence names to lengths.
typedef std::map<std::string, unsigned int>          map_str_ui_t; 

#endif
